# -*- coding = utf-8 -*-
# @Time : 2022/2/8 8:49
# @Author : 龙王赘婿_彪少
# @File : docx_demo.py
# @Software: PyCharm

# docx格式的文件本质上是一个ZIP文件，所以其实也可以把.docx文件直接改成.zip，解压后，里面的
# word document.xml 包含了Word文档的大部分内容，图片文件则保存在word media里面


from docx import Document
from docx.shared import Inches


class DOC:
    def __init__(self):
        self.func()
        self.save()
        self.show_style()

    def func(self):
        # 创建文档
        self.document = Document()
        # 添加标题
        self.document.add_heading('document title', 0)
        # 添加段落 文本可以包括制表符(\t) 换行符(\n) 回车符(\r)
        # 测试发现\r与\n效果相同，且不是回车是下箭头
        p = self.document.add_paragraph("hello world I am pig!\n")
        # 追加文本
        p.add_run("bold\n").bold = True  # 粗体
        p.add_run("hello pig\n")
        p.add_run("italic\n").italic = True  # 斜体

        self.document.add_heading("heading, level 1", level=1)
        self.document.add_paragraph("Intense quote", style="Intense Quote")

        # 添加项目列表（前面一个小圆点）
        self.document.add_paragraph(
            "first item in unordered list", style="List Bullet"
        )
        self.document.add_paragraph(
            "second item in unordered list", style="List Bullet"
        )

        # 添加项目列表（前面一个数字）
        self.document.add_paragraph(
            "first item in ordered list", style="List Number"
        )
        self.document.add_paragraph(
            "second item in ordered list", style="List Number"
        )

        # 添加图片
        self.document.add_picture(
            "../file/girl.jpg", width=Inches(2)
        )

        # 添加表格
        records = (
            (3, '101', 'Spam'),
            (7, '422', 'Eggs'),
            (4, '631', 'Spam, spam, eggs, and spam')
        )

        table = self.document.add_table(rows=1, cols=3, style='Light Shading Accent 1')
        # 获取第一行的单元格列表
        hdr_cells = table.rows[0].cells
        # 下面三行设置上面第一行的三个单元格的文本值
        hdr_cells[0].text = 'Qty'
        hdr_cells[1].text = 'Id'
        hdr_cells[2].text = 'Desc'
        for qty, id, desc in records:
            # 表格添加行，并返回行所在的单元格列表
            row_cells = table.add_row().cells
            row_cells[0].text = str(qty)
            row_cells[1].text = id
            row_cells[2].text = desc

        # 加空行
        self.document.add_page_break()

    def save(self):
        self.document.save("../file/demo.docx")

    # 很重要的方法，显示所有样式
    def show_style(self):
        s = self.document.styles  # 获取word所有样式集合对象
        for i in s:
            print(i)
            # print(i.name)


if __name__ == "__main__":
    print("begin")
    obj = DOC()
    print("end")
